本文主要是了解視窗滑鼠事件
"""
程式名稱:form_mouse_event.py
程式功能:
1. 視窗滑鼠事件了解
"""
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import (
QWidget, QApplication)
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('form_mouse_event.py')
self.setGeometry(100, 100, 500, 300)
#self.setMouseTracking(True)
self.show()
def leaveEvent(self, event):
print('leaveEvent')
def enterEvent(self, event):
print('enterEvent')
def mouseDoubleClickEvent(self, event):
print('mouseDoubleClickEvent')
def mousePressEvent(self, event):
btn_event = event.button()
match btn_event:
case Qt.MouseButton.LeftButton:
print('按了左鍵')
case Qt.MouseButton.RightButton:
print('按了右鍵')
case Qt.MouseButton.MiddleButton:
print('按了中鍵(滾輪)')
case _:
# 如電競滑鼠或其它側邊也有按鈕的滑鼠...
# 因手邊沒有相關滑鼠,
# 可能是Qt.MouseButton.ExtraButton(x),x為數字,
# 要測試才知道。
print('按了滑鼠三鍵外的其它鍵')
def mouseMoveEvent(self, event):
print('mouseMoveEvent')
def mouseReleaseEvent(self, event):
print('mouseReleaseEvent')
def wheelEvent(self, event):
print('wheelEvent')
if __name__ == '__main__':
app = QApplication()
my_app = MyApp()
sys.exit(app.exec())
enterEvent
leaveEvent
說明:
所謂視窗區是指藍色區塊的區域。
只要滾動滾輪,會一直觸發wheelEvent
在此以按滑鼠右鍵示範
按了右鍵(mousePressEvent)
mouseReleaseEvent
在此以按滑鼠左鍵示範
按了左鍵(mousePressEvent)
mouseReleaseEvent
mouseDoubleClickEvent
mouseReleaseEvent
說明:
那如何得知是按了哪個按鍵呢?
這時就要使用到PySide6.QtCore.Qt模組所提供的MouseButton列舉(enum)
註:至於列舉有哪些,可以參考連結:
PySide6.QtCore.Qt.MouseButton
於mousePressEvent事件,取出event.button()的值,在此判斷是否為滑鼠常用的三個按鍵,判斷LeftButton、RighttButton、MiddleButton三個列舉值來進行列印輸出。
在這邊學習到一直期望很久的switch-case語法,在python語法為match-case(為何要跟其它語言不一樣,XD~)。這語法要Python 3.10後才有。
其語法中,default的表示在Python中要用case _來表示。
當設定self.setMouseTracking(True)時,只要滑鼠在視窗移動,就會一直觸發mouseMoveEvent
當設定self.setMouseTracking(False)或預設(沒設定)時,滑鼠按下按鍵,移動滑鼠後才會觸發mouseMoveEvent,因為有按了按鍵,故也會有mousePressEvent、mouseReleaseEvent事件。